﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Serialization;
using System.Data;

namespace CMD.BAL.SOL
{
   [DataContractAttribute]
   public class RecuperarSol
   {
       [DataMemberAttribute]
       public bool todas;
       [DataMemberAttribute]
       public int idStatus;
       [DataMemberAttribute]
       public int idTipo;
       [DataMemberAttribute]
       public int contTodasRol;
       [DataMemberAttribute]
       public int contAltasRol;
       [DataMemberAttribute]
       public int contModifiRol;
       [DataMemberAttribute]
       public int contReemplazoRol;
       [DataMemberAttribute]
       public int contAtentidasRol;
       [DataMemberAttribute]
       public int contAprobadasRol;
       [DataMemberAttribute]
       public int contBorradoresRol;
       [DataMemberAttribute]
       public int ContRechazadaRol;
       [DataMemberAttribute]
       public int ContEnProcesoRol;
       [DataMemberAttribute]
       public int ContCanceladaRol;
       //public static List<solicitudData> RecuperaTodas(bool todas, int idStatus, int idTipo)
       //{
       //    try
       //    {
       //         Solicitud sol = new Solicitud();
       //         DataTable dt = sol.GetData(todas,idStatus,idTipo); 

       //         List<solicitudData> list = dt.AsEnumerable().Select(
       //         row => new solicitudData
       //         {
       //             id =String.IsNullOrEmpty(row.Field<Int64>(0).ToString())
       //                         ? ""
       //                         : row.Field<Int64>(0).ToString(),
       //             prioridad = String.IsNullOrEmpty(row.Field<string>(1))
       //                       ? ""
       //                       : row.Field<string>(1),
       //             tipoSol = String.IsNullOrEmpty(row.Field<string>(2))
       //                       ? ""
       //                       : row.Field<string>(2),
       //             persona = String.IsNullOrEmpty(row.Field<string>(3))
       //                       ? ""
       //                       : row.Field<string>(3),
       //             razonSocial = String.IsNullOrEmpty(row.Field<string>(4))
       //                       ? ""
       //                       : row.Field<string>(4),
       //             status = String.IsNullOrEmpty(row.Field<string>(5))
       //                       ? ""
       //                       : row.Field<string>(5),
       //              //creacion = row.Field<DateTime?>(6).GetValueOrDefault()
       //             creacion= String.IsNullOrEmpty(row.Field<DateTime>(6).ToString())
       //                         ? ""
       //                         : row.Field<DateTime>(6).ToString(),                     
       //        }
       //        ).ToList();
       //        return list;
       //    }
       //    catch (Exception ex)
       //    {
       //         throw ex;
       //    }           
       //}
       public static List<solicitudData> RecuperaTodasRol(bool todas, int idStatus, int idTipo, string unidRol)
       {
           try
           {
               SolicitudRol sol = new SolicitudRol(unidRol);

               DataTable dt = sol.GetDataRol(todas, idStatus, idTipo, unidRol);

               List<solicitudData> list = dt.AsEnumerable().Select(
               row => new solicitudData
               {
                   id = String.IsNullOrEmpty(row.Field<Int64>(0).ToString())
                               ? ""
                               : row.Field<Int64>(0).ToString(),
                   prioridad = String.IsNullOrEmpty(row.Field<string>(1))
                             ? ""
                             : row.Field<string>(1),
                   tipoSol = String.IsNullOrEmpty(row.Field<string>(2))
                             ? ""
                             : row.Field<string>(2),
                   persona = String.IsNullOrEmpty(row.Field<string>(3))
                             ? ""
                             : row.Field<string>(3),
                   razonSocial = String.IsNullOrEmpty(row.Field<string>(4))
                             ? ""
                             : row.Field<string>(4),
                   status = String.IsNullOrEmpty(row.Field<string>(5))
                             ? ""
                             : row.Field<string>(5),
                   creacion = String.IsNullOrEmpty(row.Field<DateTime>(6).ToString())
                               ? ""
                               : row.Field<DateTime>(6).ToString(),
               }
              ).ToList();
               return list;
           }
           catch (Exception ex)
           {
               throw ex;
           }
       }
       public static RecuperarSol RefreshCounters(string unidRol)
       {
           try
           {
               RecuperarSol r;
               int contAtentidasRol = 0;
               SolicitudRol sol = new SolicitudRol(unidRol);
               int td = sol.ContTodasRol;
               int a = sol.ContAltasRol;
               int m = sol.ContModificacionesRol;
               int re = sol.ContReemplazosRol;
               //int at = sol.contAtendidasRol;
               int ap = sol.ContAprobadasRol;
               int b = sol.ContBorradoresRol;
               int rec = sol.ContRechazadaRol;
               int pr = sol.ContEnProcesoRol;
               int ca = sol.ContCanceladaRol;
               contAtentidasRol = ap + rec + pr +  ca;
               r = new RecuperarSol(td, a, m, re, contAtentidasRol, ap, b, rec, pr,ca);
               return r;
           }
           catch (Exception ex)
           {
               throw ex;
           }
       }
       public RecuperarSol() 
        {
            todas = false;
            idStatus = 0;
            idTipo = 0;
        }
       public RecuperarSol(int contTodasRol, int contAltasRol, int contModifiRol, int contReemplazoRol, int contAtentidasRol, int contAprobadasRol, int contBorradoresRol, int ContRechazadaRol, int ContEnProcesoRol, int ContCanceladaRol)
       {
           this.contTodasRol=contTodasRol;
           this.contAltasRol = contAltasRol;
           this.contModifiRol = contModifiRol;
           this.contReemplazoRol = contReemplazoRol;
           this.contAtentidasRol = contAtentidasRol;
           this.contAprobadasRol = contAprobadasRol;
           this.contBorradoresRol = contBorradoresRol;
           this.ContRechazadaRol = ContRechazadaRol;
           this.ContEnProcesoRol = ContEnProcesoRol;
           this.ContCanceladaRol = ContCanceladaRol;
       }
       public RecuperarSol(bool todas, int idStatus, int idTipo)
        {
            this.todas = todas;
            this.idStatus = idStatus;
            this.idTipo = idTipo;
        }

       public static List<solicitudData> RecuperaSolicitudesFiltradas( string unidRol, string noCte, string rfc)
       {
           try
           {
               SolicitudRol sol = new SolicitudRol(unidRol);

               DataTable dt = sol.GetSolByRol(true, 8, 0, unidRol);
               string filtro = "";
               DataTable dtSol;

               //if (noCte=="" && rfc =="")
               //    dtSol= dt;
               //else
               //{
               //    
               //    if (noCte == "")
               //    {
               //        if (rfc != "")
               //        {
               //            filtro = "RFC LIKE '%" + rfc + "%'";
               //        }
               //    }
               //    else
               //        if (rfc == "")
               //        {
               //            filtro = "NUMERO_CLIENTE LIKE '%" + noCte + "%'";
               //        }
               //        else {
               //            filtro = "RFC LIKE '%" + rfc + "%' OR NUMERO_CLIENTE LIKE '%" + noCte + "%'";
               //        }

                   filtro = (rfc != "") ? "RFC LIKE '%" + rfc + "%'" : "";
                   filtro += (rfc != "" && noCte != "") ? " OR " : "";
                   filtro += (noCte != "") ? "NUMERO_CLIENTE LIKE '%" + noCte + "%'" : "";

                   DataRow[] filtered = dt.Select(filtro);

                   if (filtered.Length > 0)
                       dtSol = filtered.CopyToDataTable<DataRow>();
                   else {
                       //DataColumn dc = new DataColumn("id");
                       dtSol = dt.Clone();
                   }



               List<solicitudData> list = dtSol.AsEnumerable().Select(
               row => new solicitudData
               {
                   id = String.IsNullOrEmpty(row.Field<Int64>(0).ToString())
                               ? ""
                               : row.Field<Int64>(0).ToString(),
                   prioridad = String.IsNullOrEmpty(row.Field<string>(1))
                             ? ""
                             : row.Field<string>(1),
                   tipoSol = String.IsNullOrEmpty(row.Field<string>(2))
                             ? ""
                             : row.Field<string>(2),
                   persona = String.IsNullOrEmpty(row.Field<string>(3))
                             ? ""
                             : row.Field<string>(3),
                   razonSocial = String.IsNullOrEmpty(row.Field<string>(4))
                             ? ""
                             : row.Field<string>(4),
                   status = String.IsNullOrEmpty(row.Field<string>(5))
                             ? ""
                             : row.Field<string>(5),
                   creacion = String.IsNullOrEmpty(row.Field<DateTime>(6).ToString())
                               ? ""
                               : row.Field<DateTime>(6).ToString(),
               }
              ).ToList();
               return list;
           }
           catch (Exception ex)
           {
               throw ex;
           }
       }

   }
}